Javítani szeretné ezt a bejegyzést? Adjon részletes válaszokat erre a kérdésre, ideértve az idézeteket és annak magyarázatát, hogy miért felel meg helyesen. A kellő részletességgel nem rendelkező válaszok szerkeszthetők vagy törölhetők. Tévesen adtam hozzá fájlokat a Git-hez a következő paranccsal: git add hozzá a myfile.txt fájlt Még nem futtattam a git kötelezettségvállalást. Van-e mód ennek visszavonására, így ezek a fájlok nem lesznek benne az elkötelezettségben?
2020-12-07 21:19:52
1 2 Következő A git add-ot visszavonhatja, mielőtt végrehajtaná git resetamely eltávolítja az aktuális indexből (a "elkövetni készül" listából) anélkül, hogy bármi mást változtatna. Te tudod használni git reset fájlnév nélkül az összes esedékes változás színtelenítéséhez. Ez jól jöhet, ha túl sok fájl van, ésszerű időn belül egyenként felsorolva. A Git régi verzióiban a fenti parancsok megegyeznek a git reset HEAD és a git reset HEAD parancsokkal, és sikertelenek lesznek, ha a HEAD nincs meghatározva (mert még nem hajtott végre semmilyen változtatást a lerakatban) vagy kétértelmű (mert létrehozott egy HEAD nevű fiókot, ami hülyeség, amit nem szabad megtenni). Ez azonban megváltozott a Git 1.8.2-ben, így a Git modern verzióiban a fenti parancsokat használhatja még az első kötelezettségvállalás előtt: "git reset" (opciók és paraméterek nélkül) arra szolgál, hogy mikor nincs története során egyetlen kötelezettségvállalás sem, de ez most megadja egy üres index (a nem létező elkötelezettség megfeleltetéséhez még nincs is rajta). Dokumentáció: git reset | Akarsz: git rm - gyorsítótárazott Érvelés: Amikor új voltam ebben, először megpróbáltam git reset. (a teljes kezdeti hozzáadásom visszavonásához), csak ennek a (nem annyira) hasznos üzenetnek a megszerzéséhez: végzetes: Nem sikerült feloldani a 'HEAD' érvényes hivatkozásként. Kiderült, hogy ez azért van, mert a HEAD ref (ág?) Csak az első elkötelezettség után létezik. Vagyis ugyanazzal a kezdő problémával szembesül, mint én, ha a munkafolyamatom, mint az enyém, valami hasonló volt: CD-t a nagyszerű új projektkönyvtáramba, hogy kipróbáljam a Git-et, az új forróságot git init git add. git státusz ... sok baromság tekercs ... => Basszus, nem akartam mindezt hozzáfűzni. google "git add undo visszavonása" => megtalálja a Stack Overflow-t - igen git reset. => végzetes: Nem sikerült feloldani a 'HEAD' érvényes hivatkozásként. Kiderült továbbá, hogy van egy hiba, amely ennek haszontalansága ellen van naplózva a levelezőlistán. És hogy a helyes megoldás ott volt a Git státusz kimenetében (amit igen, szarnak szántam) ... # Elkövetendő változtatások: # (használja a "git rm --cached ..." parancsot a színpad megszüntetéséhez) ... És a megoldás valóban az, hogy a git rm - gyorsítótárazott FÁJL-t használja. Vegye figyelembe a figyelmeztetéseket itt - a git rm törli a fájl helyi munkamásolatát, de nem, ha a --cached parancsot használja. Itt van a git help rm eredménye: - gyorsítótárban Ezzel az opcióval csak az indexből távolíthatja el az útvonalakat és távolíthatja el az elérési utakat. A működő fa fájlok, akár módosítottak, akár nem, megmaradnak. Folytatom a felhasználást git rm - gyorsítótárba. mindent eltávolítani és újrakezdeni. Nem működött, mert amíg hozzá. rekurzív, kiderül, hogy az rm-nek visszatérnie kell. Sóhaj. git rm -r - gyorsítótár. Oké, most visszatértem oda, ahol elkezdtem. Legközelebb az -n segítségével szárazon futok, és megnézem, mi lesz hozzá: git add -n. Zipeltem mindent egy biztonságos helyre, mielőtt bíztam volna abban, hogy a gyorsítótár nem rombol semmit (és mi van, ha hibásan írtam). | Ha beírja: git státusz Git megmondja, hogy mi kerül megrendezésre, stb., Beleértve az utasításokat a színpadról való eltávolításhoz: használja a "git reset HEAD ..." -t a színpad megszüntetéséhez Megtalálom, hogy Git nagyon jó munkát végez, hogy megbénítson, hogy helyesen cselekedjek az ilyen helyzetekben. Megjegyzés: A legújabb Git verziók (1.8.4.x) megváltoztatták ezt az üzenetet: (használja a "git rm --cached ..." parancsot a színpad megszüntetéséhez) | Tisztázandó: a git add az aktuális munkakönyvtárból az átmeneti területre (indexre) változtat. Ezt a folyamatot stádiumnak hívják. Tehát a legtermészetesebb parancs a változtatások (a megváltozott fájlok) fokozatba helyezésére nyilvánvaló: git szakasz A git add csak egy könnyebben beírható alias a git szakaszhoz Kár, hogy nincs git unstage vagy git undd parancs. A relevánsat nehezebb kitalálni vagy emlékezni, de elég nyilvánvaló: git reset HEAD - Ehhez könnyen létrehozhatunk álnevet: git config --global alias.unadd 'reset HEAD -' git config --global alias.unstage 'reset HEAD -' És végül új parancsaink vannak: git add file1 git szakaszfájl2 git unadd file2 git színpadi fájl1 Személy szerint még rövidebb álneveket használok: git a # Rendezésre git u # A színpadképtelenítéshez | Az elfogadott válasz kiegészítése, ha a tévesen hozzáadott fájl óriási volt, akkor valószínűleg észreveszi, hogy úgy tűnik, hogy még azután is eltávolítja az indexből a „git reset” funkcióval, hogy helyet foglal a .git könyvtárban. Ez nem aggasztó dolog; a fájl valóban még mindig a tárban van, de csak "laza objektumként". Nem másoljuk át más adattárakba (klón, nyomás útján), és a helyet végül visszaszerezzük - bár talán nem is olyan hamar. Ha szorong, futhat: git gc --prune = most Frissítés (az alábbiakban megpróbálom tisztázni a zavart, amely a legtöbb szavazatot kapott válaszból adódhat): Szóval, melyik a git add valódi visszavonása? git reset HEAD ? vagy git rm - gyorsítótárazott ? Szigorúan véve, és ha nem tévedek: nincs. A git add nem vonható vissza - általában biztonságosan. Emlékezzünk először arra, hogy a git add valójában mit csinál: Ha a előzőleg nem volt nyomon követve, akkor a git add hozzáadjaa gyorsítótár, annak jelenlegi tartalmával. Ha a már nyomon volt, a git add elmenti az aktuális tartalmat (pillanatkép, verzió) a gyorsítótárba. A Git-ben ezt a műveletet még mindig add-nak hívják (nem pusztán annak frissítésére), mert egy fájl két különböző verzióját (pillanatképét) két különböző elemnek tekintik: ezért valóban új elemet adunk a gyorsítótárhoz, hogy végül később követték el. Ennek fényében a kérdés kissé kétértelmű: Tévesen adtam hozzá fájlokat a parancs használatával ... Úgy tűnik, hogy az OP forgatókönyve az első (nem követett fájl), azt akarjuk, hogy a "visszavonás" távolítsa el a fájlt (nem csak az aktuális tartalmat) a nyomon követett elemekből. Ha ez a helyzet, akkor rendben van a git rm --cached futtatása. És futtathatnánk a git reset HEAD fájlt is. Ez általában előnyösebb, mert mindkét forgatókönyvben működik: akkor is visszavonja, ha tévesen adtunk hozzá egy már nyomon követett elem verzióját. De két figyelmeztetés van. Először: Csak egy szcenárió létezik (amint arra a válasz rámutatott), amelyben a git reset HEAD nem működik, de a git rm --cached működik: egy új adattár (nincs bekötés). De valójában ez gyakorlatilag irreleváns eset. Másodszor: Ne feledje, hogy a git reset HEAD nem képes varázsütésre helyreállítani a korábban gyorsítótárazott fájl tartalmát, csak újraszinkronizálja a HEAD-ből. Ha a megtévesztett git add felülírta egy korábbi szakaszos, nem kötelező verziót, nem tudjuk helyreállítani. Szigorúan véve ezért nem vonhatjuk vissza [*]. Példa: $ git init $ echo "version 1"> file.txt $ git add file.txt # A file.txt első hozzáadása $ git elkötelezettség -m 'első elkötelezettség $ echo "2. verzió"> file.txt $ git add file.txt # Stage (ne kövesse el) a file.txt "2. verzióját" $ git diff --cached file.txt -verzió 1 + 2. verzió $ echo "3. verzió"> file.txt $ git diff file.txt 2. verzió + 3. verzió $ git add file.txt # Hoppá, nem erre gondoltunk $ git reset HEAD file.txt # Visszavonás? $ git diff --cached file.txt # Természetesen nincs különbség. szakasz == FEJ $ git diff file.txt # Visszavonhatatlanul elvesztettük a "2. verziót" -verzió 1 + 3. verzió Természetesen ez nem túl kritikus, ha csak a „git add” megadásának szokásos lusta munkafolyamatát követjük csak új fájlok hozzáadásához (1. eset), és új tartalmakat frissítünk az committ, git elkövetés -a paranccsal. * (Szerkesztés: a fentiek gyakorlatilag helyesek, de mégis lehet néhány kissé hacker / összevissza módja a szakaszos, de nem elkötelezett, majd felülírt változások helyreállításának - lásd Johannes Matokic és iolsmit megjegyzéseit) | A már hozzáadott fájl visszavonása meglehetősen egyszerű a Git használatával. A már hozzáadott myfile.txt visszaállításához használja: git reset HEAD myfile.txt Magyarázat: A nem kívánt fájl (ok) visszavonása után elvégezheti a git visszaállítását. A Head a fájl feje a helyi nyelven, az utolsó paraméter pedig a fájl neve. Az alábbi képen található lépéseket részletesebben elkészítettem az Ön számára, beleértve az összes lépést, amely ezekben az esetekben előfordulhat: | git rm - gyorsítótárba. -r rekurzívan "feloldja" mindazt, amit hozzáadott az aktuális könyvtárból | Fuss git gui és távolítsa el az összes fájlt manuálisan, vagy az összes kijelölésével és az unstage from comm gombra kattintva. | A kérdés nincs egyértelműen feltéve. Ennek oka, hogy a git add-nak két jelentése van: adjon hozzá egy új fájlt az átmeneti területhez, majd vonja vissza a git rm - cache fájllal. hozzáad egy módosított fájlt az átmeneti területhez, majd vonja vissza a git reset HEAD fájllal. Ha kétségei vannak, használja git reset HEAD fájl Mert mindkét esetben megteszi a várt dolgot. Figyelmeztetés: ha egy módosított fájlon git rm - cache fájlt csinál (egy olyan fájl, amely korábban létezett a lerakatban), akkor a fájlt eltávolítja a git comm! Ez továbbra is létezik a fájlrendszerében, de ha bárki más előhívja az ön kötelezettségét, akkor a fájl törlődik a munkafájáról. A git állapot megmondja, hogy a fájl új fájl volt-e vagy módosítva: Fiókmesteren Végrehajtandó változtatások: (használja a "git reset HEAD ..." -t a színpad megszüntetéséhez) új fájl: my_new_file.txt módosított: my_modified_file.txt | A Git minden elképzelhető cselekvéshez parancsot tartalmaz, de a tudás rendbe hozásához átfogó ismeretekre van szüksége, és emiatt a legjobb esetben is intuitív ... Amit korábban tett: Módosított egy fájlt, és használta a git add. Vagy a git add parancsot. Amit akarsz: Távolítsa el a fájlt az indexből, de változatlanul hagyja változatlanul, és a munkamásolatban nem végeznek változtatásokat: git reset HEAD Állítsa vissza a fájlt a HEAD utolsó állapotába, a módosítások visszavonásával és eltávolításával az indexből: # Gondolom `svn revert ` IIRC. git reset HEAD git checkout # Ha van egy " " nevű neve, például " ", használja: git checkout - Erre azért van szükség, mert a git reset --hard HEAD nem fog működni egyetlen fájlnál. Távolítsa el a fájlt az indexből és a verziószámból, a változatlan fájl változatlanul tartva a munkamásolatot: git rm - gyorsítótárazott Távolítsa el a fájlt a munkamásolatból és az összes verzióból: git rm | Ha a kezdeti elkötelezettséged van, és nem használhatod a git-etalaphelyzetbe állítás, csak nyilvánítsa ki a "Git csődöt", törölje a .git mappát, és kezdje elölről | A sok más válasznak megfelelően használhatja a git reset-et DE: Találtam ezt a remek kis bejegyzést, amely valójában hozzáadja a Git parancsot (nos, egy álnevet) a git unadd-hez: a részletekért lásd: git unadd vagy .. Egyszerűen, git config --global alias.unadd "reset HEAD" Most már tudod git unadd foo.txt bar.txt | Használja a git add -i fájlt az éppen hozzáadott fájlok eltávolításához a közelgő elkötelezettségből. Példa: A nem kívánt fájl hozzáadása: $ git add foo $ git állapot # Fiókmesteren # Elkövetendő változtatások: # (használja a "git reset HEAD ..." parancsot a színpad megszüntetéséhez) # # új fájl: foo # # Nem követett fájlok: # (használja a "git add ..." elemet, hogy belefoglalja az elkötelezettségbe) # [...] # Interaktív hozzáadással folytathatja a hozzáadás visszavonását (a git-nél itt beírt parancsok: "r" (visszaállítás), "1" (a lista visszaállításának első bejegyzése látható), a "visszatérés" a visszatérési módból való kilépéshez és a "q" (Kilépés): $ git add -i színpadi színpadi pálya 1: + 1 / -0 semmi foo *** Parancsok *** 1: [s] állapot 2: [u] pdátum 3: [r] evert 4: [a] dd nem követhető 5: [p] atch 6: [d] iff 7: [q] uit 8: [h] elp Mi most> r színpadi színpadi pálya 1: + 1 / -0 semmi [f] oo Visszaállítás >> 1 színpadi színpadi pálya * 1: + 1 / -0 semmi [f] oo Visszaállítás >> megjegyzés: a foo most nem követhető. megfordított egy utat *** Parancsok *** 1: [s] állapot 2: [u] pdátum 3: [r] evert 4: [a] dd nem követhető 5: [p] atch 6: [d] iff 7: [q] uit 8: [h] elp Mi van most> q Viszlát. $ Ez az! Itt van a bizonyítéka, amely megmutatja, hogy a "foo" visszatért a nyomon nem követhető listára: $ git állapot # Fiókmesteren # Nem követett fájlok: # (használja a "git add ..." parancsot, hogy belefoglalja az elkötelezettségbe) # [...] # foo semmi nem lett hozzáadva az elköteleződéshez, de nem nyomon követett fájlok vannak jelen (a "git add" használatával nyomon követhető) $ | A git remove vagy a git rm használható erre, a --cached zászlóval. Próbáld ki: git segítség rm | Így elkerülheti ezt a kellemetlen problémát, amikor új projektet indít: Hozza létre az új projekt fő könyvtárát. Futtassa a git init programot. Most hozzon létre egy .gitignore fájlt (még ha üres is). Végezze el a .gitignore fájlt. A Git nagyon megnehezíti a git visszaállítását, ha nincsenek véglegesítései. Ha létrehoz egy apró kezdeti elkötelezettséget csak annak érdekében, hogy legyen, akkor utána annyiszor git hozzáadhatja az -A-t és a git-et, ahányszor csak akar, hogy minden rendben legyen. A módszer további előnye, hogy ha később sorvégű problémákba ütközik, és frissítenie kell az összes fájlt, akkor az egyszerű: Ellenőrizze a kezdeti elkötelezettséget. Ezzel eltávolítja az összes fájlt. Ezután ellenőrizze újra a legutóbbi elkötelezettségét. Ez az aktuális vonalvégi beállítások használatával friss fájlokat fog letölteni. | Lehet, hogy Git fejlődött, mióta feltette kérdését. $> git --verzió git 1.6.2.1 verzió Most kipróbálhatja: git reset HEAD. Ezt kell keresnie. | Ne feledje, hogy ha nem ad meg változatot, akkor elválasztót kell tartalmaznia. Példa a konzolról: git reset fatal: kétértelmű argumentum ' ': ismeretlen módosítás vagy elérési út nincs a működő fában. Használja a '-' parancsot az utak és a verziók elkülönítésére git reset - Fokozatlan változások a visszaállítás után: M (Git 1.7.5.4 verzió) | Új fájlok eltávolítása az átmeneti területről (és csak új fájl esetén) a fentiek szerint: git rm - gyorsítótárazott FÁJL Csak véletlenül hozzáadott új fájlokhoz használja az rm - cached fájlt. | Egy adott mappa (és annak almappáinak) minden fájljának alaphelyzetbe állításához használja a következő parancsot: git reset * | A * paranccsal egyszerre több fájlt kezelhet: git reset HEAD * .prj git reset HEAD * .bmp git reset HEAD * gdb * stb. | Csak írja be a git reset parancsot, az visszaáll, és olyan, mintha soha nem írta volna be a git add parancsot. a legutóbbi elkötelezettséged óta. Győződjön meg róla, hogy korábban is elkötelezte magát. | Tegyük fel, hogy létrehozok egy új fájlt, newFile.txt: Tegyük fel, hogy véletlenül adtam hozzá a fájlt, git add newFile.txt: Most szeretném visszavonni ezt a hozzáadást, mielőtt végrehajtanám, git reset newFile.txt: | Egy adott fájlhoz: git reset my_file.txt git checkout my_file.txt Minden hozzáadott fájlhoz: git reset. git pénztár. Megjegyzés: a fizetés megváltoztatja a fájlokban található kódot, és az utolsó frissített (elkötelezett) állapotba lép. a reset nem változtatja meg a kódokat; csak visszaállítja a fejlécet. | A git add visszavonásához használja: git reset fájlnév | Ez a parancs eltünteti a módosításokat: git reset HEAD fájlnév.txt Használhatja is git add -p fájlok részeinek hozzáadásához. | Van interaktív mód is: git add -i Válassza a 3. lehetőséget a fájlok hozzáadásának megszüntetéséhez. Az én esetemben gyakran egynél több fájlt szeretnék hozzáadni, és interaktív módban ilyen számokkal lehet fájlokat hozzáadni. Ehhez a 4: 1, 2, 3 és 5 kivételével mindenre szükség lesz Sorrend kiválasztásához egyszerűen írja be az 1–5 karaktereket, hogy az összes szám 1 és 5 között legyen. Git állomásfájlok | git add myfile.txt # Ez felveszi a fájlodat az elkötelezettek listájába Ezzel a paranccsal ellentétben, git reset HEAD myfile.txt # Ez visszavonjaazt. tehát az előző állapotban leszel. A megadott ismét nyomon nem követett listában lesz (előző állapot). Visszaállítja a fejét azzal a megadott fájllal. Tehát, ha a fejednek nincs jelentése, akkor egyszerűen visszaállítja. | git reset fájlnév.txt Eltávolítja a fájlnév.txt nevű fájlt az aktuális indexből, az "elkövetni készül" területről, anélkül, hogy bármi mást változtatna. | git reset fájlnév.txt Eltávolítja a fájlnév.txt nevű fájlt az aktuális indexből, az "elkövetni készül" területről, anélkül, hogy bármi mást változtatna. | A Sourcetree-ben ezt egyszerűen megteheti a GUI-n keresztül. Ellenőrizheti, hogy a Sourcetree melyik paranccsal távolítja el a fájlt. Létrehoztam egy új fájlt, és hozzáadtam a Git-hez. Ezután a Sourcetree GUI segítségével rendeztem. Ez az eredmény: Fájlok szakaszon kívül helyezése [15/12/15 10:43] git -c diff.mnemonicprefix = false -c core.quotepath = false -c credential.helper = sourcetree reset -q - elérési út / fájlhoz / fájlnév.java A Sourcetree a reset funkcióval távolítja el az új fájlokat. | 1 2 Következő Nagyon aktív kérdés. Nyerjen 10 hírnevet a kérdés megválaszolásához. A jó hírnév követelménye megvédi ezt a kérdést a spamektől és a nem válaszolóktól. Nem a keresett válasz? Böngésszen a git verzió-vezérlés git-pühend git-stage címkével ellátott többi kérdésben, vagy tegye fel saját kérdését.